﻿#pragma warning(disable: 4996)
#pragma warning(disable: 6031)

/*
本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式：
输入在一行中给出序列中整数个数N（0<N≤1000），以及N个整数。数字间以空格分隔。

输出格式：
在一行中输出出现次数最多的整数及其出现次数，数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例：
10 3 2 -1 5 3 4 3 0 3 2
输出样例：
3 4
*/

#include <stdlib.h>
#include <stdio.h>

typedef struct _Array {
	int n;
	int* data;
}Array;

Array array_create(int n) {
	Array a;
	a.n = n;
	a.data = (int*)malloc(sizeof(int) * n);
	return a;
}

void array_free(Array* a) {
	if (a->data)
		free(a->data);
	a->data = NULL;
	a->n = 0;
}

int* array_at(Array* a, int i) {
	return a->data + i;
}

int array_find(Array* a, int v) {
	for (int i = 0; i < a->n; ++i) {
		if (a->data[i] == v)
			return i;
	}
	return -1;
}

Array array;
Array times;
int nFind;

void read_data() {
	int n;
	scanf("%d", &n);
	array = array_create(n);
	times = array_create(n);
	for (int i = 0; i < n; ++i) {
		scanf("%d", array_at(&array, i));
		*array_at(&times, i) = 0;
	}
}

void solve() {
	for (int i = 0; i < array.n; ++i) {
		++(*array_at(&times, array_find(&array, *array_at(&array, i))));
	}
	int k = -1;
	int m = -1;
	for (int i = 0; i < array.n; ++i) {
		if (*array_at(&times, i) > k) {
			m = i;
			k = *array_at(&times, i);
		}
	}
	printf("%d %d\n", *array_at(&array, m), k);
	array_free(&array);
	array_free(&times);
}

int main()
{
	freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-58.txt", "r", stdin);
	read_data();
	solve();
	return 0;
}

//freopen("D:/Develop/GitRepos/MOOC/浙江大学/数据结构/201906/DataStructure/M2019秋C入门和进阶练习集/7-50.txt", "r", stdin);
